#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QRegularExpression>
#include <QDateTime>
#include <QMessageBox>
#include <QJsonDocument>
#include <QJsonObject>
#include <QValueAxis>
#include <csignal>  // 添加这个头文件
#include <QNetworkInterface>  // 网络接口相关
#include <QHostAddress>       // IP地址处理
#include <QDebug>

void MainWindow::querySlaveStatus()
{
    // 查询每个从板卡状态
    for (int i = 0; i < 4; i++) {
        QString cmd = QString("link_to_camera:$ip=%1$port=11008")
        .arg(m_localIp);
        sendCommandToSlave(cmd, "192.168.0.101");

        //cmd = QString("ccd_status:ID=%1").arg(i, 2, 10, QChar('0'));
        //sendCommandToSlave(cmd, statusLeds.slave[i].ip);
    }
}


void MainWindow::processSlaveStatus(const QString &response)
{
    // 提取板卡ID（00-03）
    QString idStr = response.mid(14, 1); // 从"ccd_status:ID=00"中提取"00"
    bool ok;
    int id = idStr.toInt(&ok);

    // 验证ID有效性
    if (ok && id >= 0 && id <= 3) {
        // 更新最后响应时间（收到任何响应都视为上电）
        statusLeds.slave[id].lastResponseTime = QDateTime::currentMSecsSinceEpoch();

        // 设置指示灯为绿色（上电状态）
        statusLeds.slave[id].led->setStyleSheet(
            "background-color: green; border-radius: 12px;");

        //LOG_GENERAL(QString("Confirmation of power-on from Slave %1").arg(id, 2, 10, QChar('0')));
    }
}

void MainWindow::checkSlaveTimeout()
{
    qint64 currentTime = QDateTime::currentMSecsSinceEpoch();

    for (int i = 0; i < 4; i++) {
        // 超过5秒未收到任何响应视为下电
        if (currentTime - statusLeds.slave[i].lastResponseTime > 5000) {
            statusLeds.slave[i].led->setStyleSheet(
                "background-color: gray; border-radius: 12px;");

            // 可选：记录超时日志（调试用）
            static qint64 lastLogTime[4] = {0};
            if (currentTime - lastLogTime[i] > 10000) { // 每10秒记录一次超时
                LOG_GENERAL(QString("Slave %1 Response timeout").arg(i, 2, 10, QChar('0')));
                lastLogTime[i] = currentTime;
            }
        }
    }
}

// 在 sendCommandToSlave 方法中使用配置的从板卡端口
void MainWindow::sendCommandToSlave(const QString& cmd, const QString& ip)
{
    static QUdpSocket slaveSocket;
    quint16 port = ConfigManager::instance().slavePort(); // 使用配置的端口

    QByteArray data = cmd.toUtf8();
    slaveSocket.writeDatagram(data, QHostAddress(ip), port);

    LOG_CAMERA(QString("sent to %1: %2").arg(ip).arg(cmd));
}
void MainWindow::sendCommandToSlave1(const QString& cmd, const QString& ip)
{
    static QUdpSocket SlaveActionSocket1;
    quint16 port = ConfigManager::instance().slavePort(); // 使用配置的端口

    QByteArray data = cmd.toUtf8();
    SlaveActionSocket1.writeDatagram(data, QHostAddress(ip), port);

    LOG_CAMERA(QString("sent to %1: %2").arg(ip).arg(cmd));
}
void MainWindow::sendCommandToSlave2(const QString& cmd, const QString& ip)
{
    static QUdpSocket SlaveActionSocket2;
    quint16 port = ConfigManager::instance().slavePort(); // 使用配置的端口

    QByteArray data = cmd.toUtf8();
    SlaveActionSocket2.writeDatagram(data, QHostAddress(ip), port);

    LOG_CAMERA(QString("sent to %1: %2").arg(ip).arg(cmd));
}
void MainWindow::sendCommandToSlave3(const QString& cmd, const QString& ip)
{
    static QUdpSocket SlaveActionSocket3;
    quint16 port = ConfigManager::instance().slavePort(); // 使用配置的端口

    QByteArray data = cmd.toUtf8();
    SlaveActionSocket3.writeDatagram(data, QHostAddress(ip), port);

    LOG_CAMERA(QString("sent to %1: %2").arg(ip).arg(cmd));
}
void MainWindow::sendCommandToSlave4(const QString& cmd, const QString& ip)
{
    static QUdpSocket SlaveActionSocket4;
    quint16 port = ConfigManager::instance().slavePort(); // 使用配置的端口

    QByteArray data = cmd.toUtf8();
    SlaveActionSocket4.writeDatagram(data, QHostAddress(ip), port);

    LOG_CAMERA(QString("sent to %1: %2").arg(ip).arg(cmd));
}
